iT邦幫忙

2022 iThome 鐵人賽

1
自我挑戰組

冒牌工程師上學去系列 第 35

2-12 死結避免(銀行家演算法)、偵測及恢復

  • 分享至 

  • xImage
  •  

前一章提到死結,今天來聊聊最常用的死結避免的方法:銀行家演算法,確保系統的安全執行

銀行家演算法

其實這個演算法是參考銀行放貸款的風險計算方法,假設胖虎、小夫、大雄今年陸續都有跟銀行借錢100塊,但他們不是一次借是分次借,每個月都各跟銀行拿一點,銀行要確保2件事

  1. 銀行的總資金數量一定要>300
  2. 但通常銀行都會把資金拿去做投資或匯差等方法來讓錢滾錢,不會所有現金都放在金庫,因此他們還要確定每個月至少要有足夠的現金借給胖虎、小夫、大雄

系統就像是銀行,胖虎、小夫、大雄就是process,系統在分配這些資源給process時會確保至少有一組process執行順序是可以讓process輪到時都有拿到他需要的資源,只要有一條路線是成功的(意思就是銀行可以決定胖虎、小夫、大雄誰先開始借錢,只要其中有一個順序可以讓輪到時都有錢拿),那就給過,否則就會是不安全的狀態(可能會有deadlock)

實際的計算題型可以參考作業系統之銀行家演算法解析(帶例題)
強烈建議先看操作系統原理這部影片

死結偵測

OS會偵測是否發生deadlock,偵測方式:藉由將資源分配圖簡化,有cycle就有deadlock風險
簡化方式:將resource忽略讓process指向下一個process(紅線)
https://ithelp.ithome.com.tw/upload/images/20221023/20141684DZTQ8VbiCR.png

資源分配圖

死結恢復

如果OS偵測到deadlock就要進行recovery,有兩種方式:
1.由user自己處理 : 像是我們如果發現網頁或app卡住當當的就會手動關閉重開,或開啟工作管理員將一些程式關掉
2. 由系統處理 : 系統會有彈窗問你說應用程式目前沒有回應要等待還是結束,又叫Application Not Responding,deadlock是ANR的一種表現方式

分類會依照第一篇介紹的分類架構來進行
由於是將學習過程記錄下來,如果有任何錯誤歡迎糾正


上一篇
2-11 執行緒Thread+死結Deadlock
下一篇
2-13 RaceConditon + 臨界區間(Critical Section)
系列文
冒牌工程師上學去42
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言